class Solution {
public:
    ListNode* reverseBetween(ListNode* head, int left, int right) {
        //虚拟头
        ListNode* newhead=new ListNode(-1);
        newhead->next=head;
        //三指针
        ListNode* prev=newhead;
        ListNode* cur=head;
        //找到入口(要反转的入口)
        int i=0;
        for(i=0;i<left-1;i++)
        {
            //更新prev和cur
            prev=prev->next;
            cur=cur->next;
        }
        //开始反转
        for(i=0;i<right-left;i++)
        {
            //记录下一个节点
            ListNode* next=cur->next;
            //反转cur和next
            cur->next=next->next;
            next->next=cur;

            //更新prev
            prev->next=next;
        }
        return newhead->next;
};